Python -(マイナス)記号をつける場所を注意しましょう

Pythonに限ったことではないと思うんですが。とりあえず、私は機械学習のことをやるまでは、あまり数学的なことにプログラミングで取り組んでいなかったので、今回思わぬところにはまってしまったので書いておきます。

下記のような式があります。

[(x[0],x[2],r*((-1)**(x[1]!=hoge))) for x in trainExamples]

これは、次のように分解できるかと思います。

trainExamples =[
                 [3,1,2],
                 [4,-1,1]
                 ]
hoge = 1
r = -1

for x in trainExamples:
    a = x[0]
    b = x[2]
    c = r* ((-1) ** x[1] != hoge)

    print(a, b, c)

次の

c = r* ((-1) ** x[1] != hoge)

部分なんですけど、

x[1] != hoge

はTrue かFalseなので、1か0ということだと思います。

つまりは -1**True か -1**Falseってことですね。

 

しかし、

-1**True

ってやっても

-1**False

ってやっても、答えは -1 なんです。ん?そもそも判定の意味ないぞー?

って思ってたら、元のコードをよく見ると

(-1)**True

(-1)**False

ってやらなきゃいけなかったんですね( ゚Д゚)

 

(-1)**True は -1

(-1)**False は 1

です。

 

-1**True、-1**False とか、1に1乗するか、1を0乗するかした後、マイナス1をかけているので、どちらも-1になるわけです。

カッコの場所でエライ違いだった。

はぁー、むずかし。

 

ちなみに、0乗とか?-1乗とか?についてさっぱり忘れてしまったので、次のサイトさんを参考にさせて頂きました。m(_ _)m

べき乗とは何か。ゼロ乗・マイナス乗・分数乗・無理数乗ってどういう意味?

https://atarimae.biz/archives/20521

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です